//
//  YFTextView.swift
//  Emoji
//
//  Created by 余仿 on 16/4/20.
//  Copyright © 2016年 yf. All rights reserved.
//

import UIKit

class YFTextView: UITextView ,UITextViewDelegate{

    //MARK:将图片设置到textView中
     func insertImageWithName(emoji :YFEmoji){

        //        因为点击又可以再次细分
        //        点击了emoji文本
        if emoji.code != nil{
            //说明是emoji表情
            //            直接设置
            replaceRange(selectedTextRange!, withText: emoji.emojiStr ?? "")

            return
        }
        //        点击了空表情模型
        if emoji.isEmpty{

            return
        }
        //        点击了删除图片
        if emoji.isDelete{

            deleteBackward()

            return
        }

        //通过附件对象创建可变的属性文本
        let attrStrM = NSMutableAttributedString(attributedString: YFTextAttachment.emotionImage2AttributeString(emoji, textFont: font!))

        //设置属性,解决跟随头像过小
        attrStrM.addAttribute(NSFontAttributeName, value: font!, range: NSMakeRange(0, 1))

        //如果直接将不可变的属性文本设置给文本框的属性文本,那么无法增加文本内容,只会替换,需要将textView的属性文本设置为可变的属性文本
        let strM = NSMutableAttributedString(attributedString: attributedText)

        //因为每次替换完成后将光标都在最后,会导致添加了一个图片表情后光标不在正确位置,需要记录一下替换前的位置
        let range = selectedRange

        strM.replaceCharactersInRange(selectedRange, withAttributedString: attrStrM)

        strM.addAttribute(NSFontAttributeName, value: font!, range: NSMakeRange(range.location,range.length))
        
        //最终需要设置的是textView的属性文本
        attributedText = strM//NSAttributedString类型的实例
        
        //恢复文本框的光标位置
        selectedRange = NSMakeRange(range.location + 1, 0)

        self.delegate?.textViewDidChange?(self)
    }


    //MARK:属性文本转纯文本
     func showFullText() -> String{

        
        var strM:String = String()

        attributedText.enumerateAttributesInRange(NSMakeRange(0, attributedText.length), options: []) { (Dict, Range, _) -> Void in

            if let myTextAttachment = Dict["NSAttachment"] as? YFTextAttachment{
                //取到的是表情文本
                strM += myTextAttachment.chs ?? ""

            }else{

                strM += (self.text as NSString).substringWithRange(Range)
            }
        }

        return strM

    }

}
